function double(num) {
  return num * 2;
}
function square(num) {
  return num ** 2;
}

// 这样的编写可能存在一些弊端
var count = 10;
// var result = square(double(count));
// console.log(result);

function xjhCompose(...fns) {
  let len = fns.length;
  for (let i = 0; i < len; i++) {
    if (typeof fns[i] !== "function") {
    }
  }

  // 这里作为第一个返回值
  return function (...args) {
    let index = 0;
    // 这里执行之后,肯定就只有一个参数了
    var result = len ? fns[index].apply(this, args) : args;
    while (++index < len) {
      result = fns[index].call(this, result);
    }
    // 返回最后的执行结果, 这里肯定时最后执行才能出现这样的情况了..
    return result;
  };
}

let fn = xjhCompose(double, square);
console.log(fn(count));
